package com.fjsh.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApiResult<T> {
    /**
     * 接口状态 0正常 1失败 -1异常
     */
    private int status;

    /**
     * 状态值
     */
    private int code;

    /**
     * 提示信息
     */
    private String msg;

    /**
     * 返回数据
     */
    private T data;

    /**
     * 总数
     */
    private long count;

    public ApiResult(int status,int code,String msg,T data){
        this.status = status;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:0成功-默认返回信息:SUCCESS
     * 无返回参数
     */
    public static ApiResult success(){
        return new ApiResult<>(0,0,"SUCCESS",null);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:0成功-返回信息:自定义
     * 无返回参数
     */
    public static ApiResult success(int code, String msg){
        return new ApiResult<>(0,code,msg,null);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:0成功-默认返回信息:SUCCESS:
     * 带返回参数
     */
    public static <T> ApiResult<T> success(T data){
        return new ApiResult<>(0,0,"SUCCESS",data);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:0成功-默认返回信息:SUCCESS:
     * 带返回参数
     */
    public static <T> ApiResult<T> success(long count, T data){
        return new ApiResult<>(0,0,"SUCCESS",data,count);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:0成功-返回信息:自定义
     * 带返回参数
     */
    public static <T> ApiResult<T> success(String msg, T data){
        return new ApiResult<>(0,0,msg,data);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:自定义-默认返回信息:FAILURE
     * 无返回参数
     */
    public static ApiResult failure(){
        return new ApiResult<>(1,0,"FAILURE",null);
    }

    /**
     * 接口无异常：status:0
     * 请求成功-code:自定义-返回信息:自定义
     * 无返回参数
     */
    public static ApiResult failure(int code, String msg){
        return new ApiResult<>(1,code,msg,null);
    }

    /**
     * 接口异常
     * 请求失败-code,msg:自定义
     */
    public static ApiResult error(){ return new ApiResult<>(-1,0,"系统繁忙，请稍后再试。",null); }

    /**
     * 接口异常
     * 请求失败-code,msg:自定义
     */
    public static ApiResult error(String msg){ return new ApiResult<>(-1,0,msg,null); }

    /**
     * 接口异常
     * 请求失败-code,msg:自定义
     */
    public static ApiResult error(int code, String msg){ return new ApiResult<>(-1,code,msg,null); }
}
